//+------------------------------------------------------------------+
//|                        DXBox.mqh DirectX 3D 立方体类头文件       |
//|                版权所有 2000-2025, MetaQuotes Ltd.              |
//|                        官方网址: https://www.mql5.com            |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2025, MetaQuotes Ltd."  // 版权声明
#property link      "https://www.mql5.com"                 // 官方链接

#include "DXMesh.h"    // 引入 3D 网格基类 CDXMesh（提供顶点/索引缓冲区管理）
#include "DXMath.h"    // 引入 DirectX 数学工具类（向量、矩阵、颜色计算）
#include "DXUtils.h"   // 引入 DirectX 工具类（3D 几何体计算等辅助函数）

//+------------------------------------------------------------------+
//| CDXBox 类                                                       |
//| 功能：MT5 DirectX 3D 立方体渲染类，基于网格基类实现可渲染的立方体对象 |
//| 继承关系：public CDXMesh（基于 3D 网格类，扩展立方体特有创建/更新逻辑）|
//| 核心特性：                                                      |
//|  1. 通过对角顶点坐标创建轴对齐立方体（AABB，Axis-Aligned Bounding Box）|
//|  2. 支持动态更新立方体的边界（修改对角顶点，无需重新创建网格）      |
//|  3. 继承网格基类的渲染能力（自动绑定 DirectX 资源，支持光照、纹理）  |
//|  4. 立方体顶点默认白色（RGBA：1.0,1.0,1.0,1.0），可通过基类接口修改 |
//+------------------------------------------------------------------+
class CDXBox : public CDXMesh
  {
public:
   /**
    * @brief 构造函数：初始化 DirectX 3D 立方体对象
    * @details 调用父类 CDXMesh 的构造函数，初始化网格基类的顶点/索引缓冲区等资源管理参数
    */
                     CDXBox();

   /**
    * @brief 析构函数：销毁 DirectX 3D 立方体对象
    * @details 依赖父类 CDXMesh 的析构逻辑，自动释放顶点缓冲区、索引缓冲区等 DirectX 资源
    */
                    ~CDXBox();

   /**
    * @brief 创建立方体网格（基于对角顶点坐标，绑定 DirectX 渲染资源）
    * @param dispatcher [in] DirectX 资源调度器（管理立方体的顶点/索引缓冲区等 GPU 资源）
    * @param buffer_scene [in] 场景输入数据缓冲区（传递视图、投影、光照等渲染参数给着色器）
    * @param from [in] 立方体的起始对角顶点（3D 空间坐标，如左下角前顶点）
    * @param to [in] 立方体的结束对角顶点（3D 空间坐标，如右上角后顶点，需满足 to.x>from.x、to.y>from.y、to.z>from.z）
    * @return bool - 操作结果：true 表示立方体创建成功（资源分配与网格初始化完成），false 表示失败（如资源调度器错误）
    * @note 内部会调用 DXComputeBox 工具函数生成立方体的顶点和索引数据，顶点默认白色，后续可通过基类接口修改颜色/纹理
    */
   bool              Create(CDXDispatcher &dispatcher,CDXInput* buffer_scene,const DXVector3 &from,const DXVector3 &to);

   /**
    * @brief 更新立方体的边界（修改对角顶点，复用现有网格资源）
    * @param from [in] 新的起始对角顶点（3D 空间坐标）
    * @param to [in] 新的结束对角顶点（3D 空间坐标，需满足轴对齐条件）
    * @return bool - 操作结果：true 表示更新成功（顶点数据更新，索引数据复用），false 表示失败（如顶点缓冲区锁定失败）
    * @note 相比重新调用 Create，此方法更高效（无需重新创建 GPU 资源），适用于立方体动态缩放/移动场景
    */
   bool              Update(const DXVector3 &from,const DXVector3 &to);

private:
   /**
    * @brief 准备立方体顶点数据（内部辅助方法，由 Create/Update 调用）
    * @param from [in] 立方体起始对角顶点（3D 坐标）
    * @param to [in] 立方体结束对角顶点（3D 坐标）
    * @note 核心逻辑：通过 DXComputeBox 生成立方体的 8 个顶点和 36 个索引（6 个面，每个面 2 个三角形，共 6*2*3=36 个索引），
    *       并设置顶点默认颜色为白色，后续可通过基类接口修改
    */
   void              PrepareVertices(const DXVector3 &from,const DXVector3 &to);
  };
//+------------------------------------------------------------------+